package cn.iocoder.yudao.module.scrm.dal.dataobject.order;

import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.scrm.controller.admin.commom.vo.FileInfoVO;
import cn.iocoder.yudao.module.scrm.controller.admin.order.vo.OrderFileListVo;
import cn.iocoder.yudao.module.scrm.dal.dataobject.refund.RefundDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.AbstractJsonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单 DO
 *
 * @author admin
 */
@TableName(value ="scrm_order", autoResultMap = true)
@KeySequence("scrm_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderDO extends BaseDO {

    private static final long serialVersionUID = 4213485604654866291L;
    /**
     * id
     */
    @TableId
    private Integer id;
    /**
     * 订单标题
     */
    private String title;
    /**
     * 关联客户id
     */
    private Integer customerId;
    /**
     * 关联产品id
     */
    private Integer productId;
    /**
     * 订单总金额-关联产品后订单金额显示为产品报价总金额；但是可以修改。
     */
    private BigDecimal orderTotalMoney;
    /**
     * 签单日期
     */
    private LocalDateTime signingDate;
    /**
     * 订单类型  scrm_order_type
     */
    private String orderType;
    /**
     * 开始日期
     */
    private LocalDateTime startDate;
    /**
     * 到期日期
     */
    private LocalDateTime expireDate;
    /**
     * 客户签约人
     */
    private String clientSignatory;
    /**
     * 我方签约人
     */
    private String ourSignatory;
    /**
     * 付款方式   scrm_payment_method
     */
    private String paymentMethod;
    /**
     * 备注信息
     */
    private String remark;
    /**
     * 系统编号
     */
    private String systemNumber;
    /**
     * 归属人员id
     */
    private String ownerUserId;
    /**
     * 前归属人员id
     */
    private String oldOwnerUserId;
    /**
     * 审批流id
     */
    private String instanceId;
    /**
     * 订单是否提交审批    0未提交  1已提交
     */
    private String instanceIfSubmit;
    /**
     * 审批状态-绑定流程表的审批状态
     */
    private String instanceState;

    /**
     * -附件url属性数组，JSON 格式
     */
    @Schema(description = "附件url", example = "https://www.iocoder.cn")
    @TableField(typeHandler = OrderDO.FileInfoHandler.class)
    private List<FileInfoVO> fileUrl;

    /**
     * 图片-附件url属性数组，JSON 格式
     */
    @Schema(description = "图片-附件url", example = "https://www.iocoder.cn")
    @TableField(typeHandler = OrderDO.FileInfoHandler.class)
    private List<FileInfoVO> pictureAttachment;




    /**
     * 备用字段-文件名称
     */
    private String vField;


    public static class FileInfoHandler extends AbstractJsonTypeHandler<List<FileInfoVO>> {

        @Override
        protected List<FileInfoVO> parse(String json) {
            return JsonUtils.parseArray(json, FileInfoVO.class);
        }

        @Override
        protected String toJson(List<FileInfoVO> obj) {
            return JsonUtils.toJsonString(obj);
        }

    }

    /*@TableField(typeHandler = PropertyTypeHandler.class)
    private Object fileUrl;


    @TableField(typeHandler = PropertyTypeHandler.class)
    private Object pictureAttachment;

    // TODO @芋艿：可以找一些新的思路
    public static class PropertyTypeHandler extends AbstractJsonTypeHandler<Object> {

        @Override
        protected Object parse(String json) {
            return JsonUtils.parseArray(json, OrderFileListVo.class);
        }

        @Override
        protected String toJson(Object obj) {
            return JsonUtils.toJsonString(obj);
        }

    }*/


   /* *//**
     * 附件属性
     *//*
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Property {
        @Schema(description = "附件url", example = "https://www.iocoder.cn")
        private String fileUrl;
        @Schema(description = "附件名称", example = "我是附件.jpg")
        private String fileName;
    }*/

}